Add Picard-Chebyshev numerical integrator #69
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add the Picard-Chebyshev First Order ODE Integrator for solving initial value
problems.
This is based on a whole slew of papers, though this implementation leans heavily
on the algorithm described in:
"Surfing Chaotic Perturbations in Interplanetary Multi-Flyby Trajectories:
Augmented Picard-Chebyshev Integration for Parallel and GPU Computing
Architectures", 2022, https://doi.org/10.2514/6.2022-1275
Though that paper appears to have a typo in its
Amatrix definition, so some ofthe thesis written by Darin Koblick "Parallel High-Precision Orbit Propagation
Using The Modified Picard-Chebyshev Method", 2012
was used to correct the matrix definition.
This is not a GPU implementation, though some small simplifications were applied to
the mathematics. This implementation is designed to reduce the total number of
SPICE kernel calls to a minimum, as it was found that the Radau integration time
was dominated by these queries.
Since this integrator fits Chebyshev polynomials at the same time that it performs
the integration, the integrator is designed to record the polynomial coefficients.
These are stored in the
PicardStep, which exposes a function allowing theuser to query the state of the system at any point between the start of the
integration and the end.
Overall performance is similar to slightly worse than the existing Radau
implementation. The main benefits of this implementation are that it is designed
to construct a time series set of chebyshev fits of the orbit, meaning at any
point from the start to the end of the integration, the best fitted orbit can be
directly queried without performing additional integrations.